package com.foodcommunity.mapper;

import com.foodcommunity.entity.Restaurant;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface RestaurantMapper {
    /**
     * 获取热门餐厅
     */
    List<Restaurant> selectHotRestaurants();
    
    /**
     * 根据ID查询餐厅
     */
    Restaurant selectById(Long id);
    
    /**
     * 插入餐厅
     */
    int insert(Restaurant restaurant);
    
    /**
     * 更新餐厅
     */
    int update(Restaurant restaurant);
    
    /**
     * 删除餐厅
     */
    int delete(Long id);
    
    /**
     * 分页查询餐厅
     */
    List<Restaurant> selectWithPage(@Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 查询餐厅总数
     */
    int count();
    
    /**
     * 根据条件筛选餐厅
     */
    List<Restaurant> selectByCondition(@Param("cuisineType") String cuisineType, 
                                      @Param("minPrice") Integer minPrice, 
                                      @Param("maxPrice") Integer maxPrice, 
                                      @Param("minRating") Double minRating,
                                      @Param("offset") int offset, 
                                      @Param("limit") int limit);
    
    /**
     * 根据条件查询餐厅总数
     */
    int countByCondition(@Param("cuisineType") String cuisineType, 
                        @Param("minPrice") Integer minPrice, 
                        @Param("maxPrice") Integer maxPrice, 
                        @Param("minRating") Double minRating);
    
    /**
     * 更新餐厅评分
     */
    int updateRating(@Param("id") Long id, @Param("rating") Double rating);
    
    /**
     * 根据菜系推荐餐厅
     */
    List<Map<String, Object>> selectRecommendedRestaurantsByCuisineTypes(
            @Param("cuisineTypes") List<String> cuisineTypes, 
            @Param("userId") Long userId, 
            @Param("limit") int limit);
    
    /**
     * 查询高评分餐厅（排除指定用户已评价的餐厅）
     */
    List<Map<String, Object>> selectHighRatedRestaurantsExcludeUser(
            @Param("userId") Long userId, 
            @Param("limit") int limit);
    
    /**
     * 查询热门餐厅排行榜
     */
    List<Map<String, Object>> selectHotRestaurantsRanking(int limit);
    
    /**
     * 查询指定区域内的餐厅
     */
    List<Restaurant> selectInArea(@Param("northLat") Double northLat, 
                                 @Param("southLat") Double southLat, 
                                 @Param("eastLng") Double eastLng, 
                                 @Param("westLng") Double westLng,
                                 @Param("cuisineType") String cuisineType, 
                                 @Param("minPrice") Integer minPrice, 
                                 @Param("maxPrice") Integer maxPrice, 
                                 @Param("minRating") Double minRating);
} 